curl で AWS API を叩いてみた
AWS CLIやAWS SDKではなく直接AWSのAPIを叩きたい
こんにちは、のんピ(@non____97)です。
皆さんはAWS CLIやAWS SDKではなく、直接AWSのAPIを叩きたいなと思ったことはありますか? 私はあります。
AWSのAPIに対してアップデートがかかると、AWS CLI v1やboto3などでもアップデートの内容がすぐに反映される認識です。ただし、万が一AWS CLI v1やboto3などがアップデートになかなか追従できない場合は「早くアップデートブログを書きたいのに書けない」というもどかしい気持ちになること間違いなしです。
そんな時に備えて、直接AWS APIを叩けられるように整理しておきたいと思います。
いきなりまとめ
- curlで簡単にAWS APIを叩くことが可能
- AWS Signature V4にもサポートしているよ
AWS APIを直接叩く際はAWS Signature V4で署名が必要
AWS APIを直接叩く場合は、AWS Signature V4で署名が必要です。AWS CLIやAWS SDKの場合は意識する必要はありません。
重要
AWS SDK (「サンプルコードとライブラリ」を参照) または AWS コマンドライン (CLI) ツール を使用して API リクエストを AWS に送信する場合、SDK および CLI クライアントが指定したアクセスキーを使用してリクエストを認証するため、このセクションをスキップできます。正当な理由がない限り、常に SDK または CLI を使用することをお勧めします。
. . (中略) . .
リクエストに署名するタイミング
AWS に API リクエストを送信するためのカスタムコードを記述するときは、リクエストに署名するためのコードを含める必要があります。カスタムコードを書く理由には、以下のような場合が考えられます。
- AWS SDK がないプログラミング言語を使用しているためです。
- AWS にリクエストを送る方法を完全に管理する必要がある場合。
署名を作成するまでには複数のステップがあるため、さっとAPIを叩きたい時には手間です。
署名手順の概要
手順 1: 正規リクエストを作成する
リクエストのコンテンツ (ホスト、アクション、ヘッダーなど) を標準的な正規形式に変換します。正規リクエストは、署名する文字列を作成するのに使用される入力の 1 つです。詳細については、「AWS API リクエスト署名の要素」を参照してください。手順 2: 正規リクエストのハッシュを作成する
署名キーは、最初のハッシュオペレーションのキーとして AWS のシークレットアクセスキーを使用して、リクエスト日、リージョン、およびサービスに対する一連のキー付きハッシュオペレーション (HMAC オペレーション) を実行することによって抽出します。手順 2: 署名文字列を作成する
正規リクエストに加えてアルゴリズム、リクエスト日、認証情報スコープ、正規リクエストのダイジェスト (ハッシュ) などの追加情報を使用して、署名する文字列を作成します。手順 4: 署名を計算する
署名キーを取得したら、署名文字列にキー付きハッシュ操作を実行することで、署名を計算します。取得した署名キーを、この操作のハッシュキーとして使用します。手順 5: リクエストヘッダーに署名を追加します。
署名を計算したら、それをリクエストの HTTP ヘッダーまたはクエリ文字列に追加します。署名付き AWS API リクエストを作成する - AWS Identity and Access Management
そんな少しハードルが高めなAWS Signature V4ですが、curlではcurl 7.75.0から追加された--aws-sigv4
を使用することで、簡単にリクエストにAWS Signature V4の署名を付与することが可能です。
--aws-sigv4 <provider1[:provider2[:region[:service]]]>
Use AWS V4 signature authentication in the transfer.
The provider argument is a string that is used by the algorithm when creating outgoing authentication headers.
The region argument is a string that points to a geographic area of a resources collection (region-code) when the region name is omitted from the endpoint.
The service argument is a string that points to a function provided by a cloud (service-code) when the service name is omitted from the endpoint.
If --aws-sigv4 is provided several times, the last set value is used.
Example:
curl --aws-sigv4 "aws:amz:us-east-2:es" --user "key:secret" https://example.comSee also --basic and -u, --user. Added in 7.75.0.
これを使わない手はないですね。
やってみた
GET
実際にやってみます。
まず、GetFunctionを叩いてみます。
LambdaStack-LambdaD247545B-B3YfrxHrZ32g
というLambda関数の情報を取得します。
実行環境はCloudShellです。
# LambdaのFull Accessを持ったIAMロールにAssume Role $ session=$(aws sts assume-role \ --role-arn arn:aws:iam::<AWSアカウントID>:role/LambdaFullAccess \ --role-session-name "role_session" ) # 取得した認証情報をセット $ aws_access_key_id=$(echo "${session}" | jq -r ".Credentials.AccessKeyId") $ aws_secret_access_key=$(echo "${session}" | jq -r ".Credentials.SecretAccessKey") $ aws_session_token=$(echo "${session}" | jq -r ".Credentials.SessionToken") # アクセス先のリージョンとサービスをセット $ region=us-east-1 $ service=lambda # GetFunction を叩く $ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g" \ -H "X-Amz-Security-Token: ${aws_session_token}" \ --aws-sigv4 "aws:amz:${region}:${service}" \ --user "${aws_access_key_id}:${aws_secret_access_key}" \ -vs \ | jq -r . * Trying 44.192.250.55:443... * Connected to lambda.us-east-1.amazonaws.com (44.192.250.55) port 443 * ALPN: curl offers h2,http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH } [5 bytes data] * TLSv1.2 (OUT), TLS handshake, Client hello (1): } [512 bytes data] * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none { [5 bytes data] * TLSv1.2 (IN), TLS handshake, Server hello (2): { [100 bytes data] * TLSv1.2 (IN), TLS handshake, Certificate (11): { [4976 bytes data] * TLSv1.2 (IN), TLS handshake, Server key exchange (12): { [333 bytes data] * TLSv1.2 (IN), TLS handshake, Server finished (14): { [4 bytes data] * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): } [70 bytes data] * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): } [1 bytes data] * TLSv1.2 (OUT), TLS handshake, Finished (20): } [16 bytes data] * TLSv1.2 (IN), TLS change cipher, Change cipher spec (1): { [1 bytes data] * TLSv1.2 (IN), TLS handshake, Finished (20): { [16 bytes data] * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN: server accepted h2 * Server certificate: * subject: CN=lambda.us-east-1.amazonaws.com * start date: Sep 24 00:00:00 2023 GMT * expire date: Oct 21 23:59:59 2024 GMT * subjectAltName: host "lambda.us-east-1.amazonaws.com" matched cert's "lambda.us-east-1.amazonaws.com" * issuer: C=US; O=Amazon; CN=Amazon RSA 2048 M01 * SSL certificate verify ok. { [5 bytes data] * using HTTP/2 * Server auth using AWS_SIGV4 with user '<AWS Sigv4ユーザー>' * [HTTP/2] [1] OPENED stream for https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g * [HTTP/2] [1] [:method: GET] * [HTTP/2] [1] [:scheme: https] * [HTTP/2] [1] [:authority: lambda.us-east-1.amazonaws.com] * [HTTP/2] [1] [:path: /2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g] * [HTTP/2] [1] [authorization: AWS4-HMAC-SHA256 Credential=<AWS Sigv4ユーザー>/20231111/us-east-1/lambda/aws4_request, SignedHeaders=host;x-amz-date;x-amz-security-token, Signature=<AWS Sigv4の署名>] * [HTTP/2] [1] [x-amz-date: 20231111T063959Z] * [HTTP/2] [1] [user-agent: curl/8.3.0] * [HTTP/2] [1] [accept: */*] * [HTTP/2] [1] [x-amz-security-token: <セキュリティトークン>] } [5 bytes data] > GET /2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g HTTP/2 > Host: lambda.us-east-1.amazonaws.com > Authorization: AWS4-HMAC-SHA256 Credential=<AWS Sigv4ユーザー>/20231111/us-east-1/lambda/aws4_request, SignedHeaders=host;x-amz-date;x-amz-security-token, Signature=<AWS Sigv4の署名> > X-Amz-Date: 20231111T063959Z > User-Agent: curl/8.3.0 > Accept: */* > X-Amz-Security-Token: <セキュリティトークン> > { [5 bytes data] < HTTP/2 200 < date: Sat, 11 Nov 2023 06:40:00 GMT < content-type: application/json < content-length: 3573 < x-amzn-requestid: 5c6c63b8-d788-4e68-9ece-6e08c84bd16a < { [3573 bytes data] * Connection #0 to host lambda.us-east-1.amazonaws.com left intact { "Configuration": { "Description": "", "TracingConfig": { "Mode": "Active" }, "VpcConfig": null, "SigningJobArn": null, "SnapStart": { "OptimizationStatus": "Off", "ApplyOn": "None" }, "RevisionId": "12035d75-8318-4364-a4ab-100f5ba1760f", "LastModified": "2023-11-10T04:17:51.000+0000", "FileSystemConfigs": null, "FunctionName": "LambdaStack-LambdaD247545B-B3YfrxHrZ32g", "Runtime": "nodejs18.x", "Version": "$LATEST", "PackageType": "Zip", "LastUpdateStatus": "Successful", "Layers": null, "FunctionArn": "arn:aws:lambda:us-east-1:<AWSアカウントID>:function:LambdaStack-LambdaD247545B-B3YfrxHrZ32g", "KMSKeyArn": null, "MemorySize": 128, "ImageConfigResponse": null, "LastUpdateStatusReason": null, "DeadLetterConfig": null, "Timeout": 10, "Handler": "index.handler", "CodeSha256": "WXtx07ODdA98WKBki+olSk/Qwh7Iw9FX2mcf0STZu+k=", "Role": "arn:aws:iam::<AWSアカウントID>:role/LambdaStack-LambdaServiceRoleA8ED4D3B-CAYo4GRipcNH", "SigningProfileVersionArn": null, "MasterArn": null, "RuntimeVersionConfig": { "Error": null, "RuntimeVersionArn": "arn:aws:lambda:us-east-1::runtime:5b65a6230d1054ba2f3bcff29fe7654ff1a5453cd2cfa1a03367a850c540a9da" }, "CodeSize": 581, "State": "Active", "StateReason": null, "Environment": { "Variables": { "AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1" }, "Error": null }, "EphemeralStorage": { "Size": 512 }, "StateReasonCode": null, "LastUpdateStatusReasonCode": null, "Architectures": [ "arm64" ] }, "Concurrency": null, "Code": { "ResolvedImageUri": null, "RepositoryType": "S3", "ImageUri": null, "Location": "<Lambda関数のコードのロケーション>" }, "Tags": { "aws:cloudformation:stack-name": "LambdaStack", "aws:cloudformation:stack-id": "arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/LambdaStack/ba9cb9e0-7f62-11ee-9786-0e7a74670299", "aws:cloudformation:logical-id": "LambdaD247545B" } }
AWS Signature V4で署名がされ、Lambda関数の情報を取得できていますね。
--aws-sigv4
を付与しない場合は、以下のとおりです。
$ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g" \ -H "X-Amz-Security-Token: ${aws_session_token}" \ --user "${aws_access_key_id}:${aws_secret_access_key}" \ -vs \ | jq -r . * Trying 44.192.248.42:443... * Connected to lambda.us-east-1.amazonaws.com (44.192.248.42) port 443 * ALPN: curl offers h2,http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH } [5 bytes data] * TLSv1.2 (OUT), TLS handshake, Client hello (1): } [512 bytes data] * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none { [5 bytes data] * TLSv1.2 (IN), TLS handshake, Server hello (2): { [100 bytes data] * TLSv1.2 (IN), TLS handshake, Certificate (11): { [4976 bytes data] * TLSv1.2 (IN), TLS handshake, Server key exchange (12): { [333 bytes data] * TLSv1.2 (IN), TLS handshake, Server finished (14): { [4 bytes data] * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): } [70 bytes data] * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): } [1 bytes data] * TLSv1.2 (OUT), TLS handshake, Finished (20): } [16 bytes data] * TLSv1.2 (IN), TLS change cipher, Change cipher spec (1): { [1 bytes data] * TLSv1.2 (IN), TLS handshake, Finished (20): { [16 bytes data] * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN: server accepted h2 * Server certificate: * subject: CN=lambda.us-east-1.amazonaws.com * start date: Sep 24 00:00:00 2023 GMT * expire date: Oct 21 23:59:59 2024 GMT * subjectAltName: host "lambda.us-east-1.amazonaws.com" matched cert's "lambda.us-east-1.amazonaws.com" * issuer: C=US; O=Amazon; CN=Amazon RSA 2048 M01 * SSL certificate verify ok. { [5 bytes data] * using HTTP/2 * Server auth using Basic with user '<Basic認証のユーザー>' * [HTTP/2] [1] OPENED stream for https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g * [HTTP/2] [1] [:method: GET] * [HTTP/2] [1] [:scheme: https] * [HTTP/2] [1] [:authority: lambda.us-east-1.amazonaws.com] * [HTTP/2] [1] [:path: /2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g] * [HTTP/2] [1] [authorization: Basic <Basic認証のクレデンシャル>] * [HTTP/2] [1] [user-agent: curl/8.3.0] * [HTTP/2] [1] [accept: */*] * [HTTP/2] [1] [x-amz-security-token: <セキュリティトークン>] } [5 bytes data] > GET /2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g HTTP/2 > Host: lambda.us-east-1.amazonaws.com > Authorization: Basic <Basic認証のクレデンシャル> > User-Agent: curl/8.3.0 > Accept: */* > X-Amz-Security-Token: <セキュリティトークン> > { [5 bytes data] < HTTP/2 403 < date: Sat, 11 Nov 2023 06:59:54 GMT < content-type: application/json < content-length: 42 < x-amzn-requestid: 2662ec38-4704-45ba-bb6c-75dfc69f35ee < x-amzn-errortype: MissingAuthenticationTokenException < { [42 bytes data] * Connection #0 to host lambda.us-east-1.amazonaws.com left intact { "message": "Missing Authentication Token" }
Authorizationヘッダーに記載の認証方式がAWS4-HMAC-SHA256
ではなく、Basic
であることからBasic認証をしていることが分かります。そして、403エラーとなっていますね。
POST
次にPOSTでも試します。試すAPIはCreateAliasです。
リクエストパラメーターの定義は、人力でJSON文字列を作成するのではなく、JSONで定義したものをjqに渡してあげるとスマートだと思います。(catでも動作します)
実行結果は以下のとおりです。
# LambdaのFull Accessを持ったIAMロールにAssume Role $ session=$(aws sts assume-role \ --role-arn arn:aws:iam::<AWSアカウントID>:role/LambdaFullAccess \ --role-session-name "role_session" ) # 取得した認証情報をセット $ aws_access_key_id=$(echo "${session}" | jq -r ".Credentials.AccessKeyId") $ aws_secret_access_key=$(echo "${session}" | jq -r ".Credentials.SecretAccessKey") $ aws_session_token=$(echo "${session}" | jq -r ".Credentials.SessionToken") # アクセス先のリージョンとサービスをセット $ region=us-east-1 $ service=lambda # リクエストパラメーターを定義 $ request_parameters=$(jq -c . << 'EOF' { "Description": "alias test", "FunctionVersion": "$LATEST", "Name": "alias" } EOF ) # CreateAlias を叩く $ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases" \ -H "X-Amz-Security-Token: ${aws_session_token}" \ -H "content-type: application/json" \ --aws-sigv4 "aws:amz:${region}:${service}" \ --user "${aws_access_key_id}:${aws_secret_access_key}" \ -XPOST -d "${request_parameters}" \ -vs \ | jq -r . * Trying 44.192.249.232:443... * Connected to lambda.us-east-1.amazonaws.com (44.192.249.232) port 443 * ALPN: curl offers h2,http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH } [5 bytes data] * TLSv1.2 (OUT), TLS handshake, Client hello (1): } [512 bytes data] * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none { [5 bytes data] * TLSv1.2 (IN), TLS handshake, Server hello (2): { [100 bytes data] * TLSv1.2 (IN), TLS handshake, Certificate (11): { [4976 bytes data] * TLSv1.2 (IN), TLS handshake, Server key exchange (12): { [333 bytes data] * TLSv1.2 (IN), TLS handshake, Server finished (14): { [4 bytes data] * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): } [70 bytes data] * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): } [1 bytes data] * TLSv1.2 (OUT), TLS handshake, Finished (20): } [16 bytes data] * TLSv1.2 (IN), TLS change cipher, Change cipher spec (1): { [1 bytes data] * TLSv1.2 (IN), TLS handshake, Finished (20): { [16 bytes data] * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN: server accepted h2 * Server certificate: * subject: CN=lambda.us-east-1.amazonaws.com * start date: Sep 24 00:00:00 2023 GMT * expire date: Oct 21 23:59:59 2024 GMT * subjectAltName: host "lambda.us-east-1.amazonaws.com" matched cert's "lambda.us-east-1.amazonaws.com" * issuer: C=US; O=Amazon; CN=Amazon RSA 2048 M01 * SSL certificate verify ok. { [5 bytes data] * using HTTP/2 * Server auth using AWS_SIGV4 with user '<AWS Sigv4ユーザー>' * [HTTP/2] [1] OPENED stream for https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases * [HTTP/2] [1] [:method: POST] * [HTTP/2] [1] [:scheme: https] * [HTTP/2] [1] [:authority: lambda.us-east-1.amazonaws.com] * [HTTP/2] [1] [:path: /2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases] * [HTTP/2] [1] [authorization: AWS4-HMAC-SHA256 Credential=<AWS Sigv4ユーザー>/20231111/us-east-1/lambda/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz-security-token, Signature=<AWS Sigv4の署名>] * [HTTP/2] [1] [x-amz-date: 20231111T080430Z] * [HTTP/2] [1] [user-agent: curl/8.3.0] * [HTTP/2] [1] [accept: */*] * [HTTP/2] [1] [x-amz-security-token: <セキュリティトークン>] * [HTTP/2] [1] [content-type: application/json] * [HTTP/2] [1] [content-length: 71] } [5 bytes data] > POST /2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases HTTP/2 > Host: lambda.us-east-1.amazonaws.com > Authorization: AWS4-HMAC-SHA256 Credential=<AWS Sigv4ユーザー>/20231111/us-east-1/lambda/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz-security-token, Signature=<AWS Sigv4の署名> > X-Amz-Date: 20231111T080430Z > User-Agent: curl/8.3.0 > Accept: */* > X-Amz-Security-Token: <セキュリティトークン> > content-type: application/json > Content-Length: 71 > } [71 bytes data] < HTTP/2 201 < date: Sat, 11 Nov 2023 08:04:30 GMT < content-type: application/json < content-length: 250 < x-amzn-requestid: 3e9ceef4-64d0-4010-8d21-144cb6d045a6 < { [250 bytes data] * Connection #0 to host lambda.us-east-1.amazonaws.com left intact { "AliasArn": "arn:aws:lambda:us-east-1:<AWSアカウントID>:function:LambdaStack-LambdaD247545B-B3YfrxHrZ32g:alias", "Description": "alias test", "FunctionVersion": "$LATEST", "Name": "alias", "RevisionId": "04119442-a604-44d9-b6f1-09c8362312a8", "RoutingConfig": null }
リクエストが受け付けられたようですね。
GetAliasを叩いて確認します。
$ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases" \ -H "X-Amz-Security-Token: ${aws_session_token}" \ --aws-sigv4 "aws:amz:${region}:${service}" \ --user "${aws_access_key_id}:${aws_secret_access_key}" \ -s \ | jq -r . { "Aliases": [ { "AliasArn": "arn:aws:lambda:us-east-1:<AWSアカウントID>:function:LambdaStack-LambdaD247545B-B3YfrxHrZ32g:alias", "Description": "alias test", "FunctionVersion": "$LATEST", "Name": "alias", "RevisionId": "04119442-a604-44d9-b6f1-09c8362312a8", "RoutingConfig": null } ], "NextMarker": null }
確かにエイリアスが設定されていますね。
PUT
POSTが出来たらPUTも似たようなものですが試します。
UpdateAliasで先ほど作成したエイリアスの説明を更新します。
実行結果は以下のとおりです。
$ request_parameters=$(jq -c . << 'EOF' { "Description": "alias test 2", "FunctionVersion": "$LATEST" } EOF ) # UpdateAlias を叩く $ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases/alias" \ -H "X-Amz-Security-Token: ${aws_session_token}" \ -H "content-type: application/json" \ --aws-sigv4 "aws:amz:${region}:${service}" \ --user "${aws_access_key_id}:${aws_secret_access_key}" \ -XPUT -d "${request_parameters}" \ -s \ | jq -r . { "AliasArn": "arn:aws:lambda:us-east-1:984900217833:function:LambdaStack-LambdaD247545B-B3YfrxHrZ32g:alias", "Description": "alias test 2", "FunctionVersion": "$LATEST", "Name": "alias", "RevisionId": "017ed654-c15d-4da0-a183-9d8cc38e128d", "RoutingConfig": null }
エイリアスの更新ができました。
DELETE
最後にDeleteAliasでエイリアスを削除します。
$ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases/alias" \ -H "X-Amz-Security-Token: ${aws_session_token}" \ --aws-sigv4 "aws:amz:${region}:${service}" \ --user "${aws_access_key_id}:${aws_secret_access_key}" \ -XDELETE \ -s \ | jq -r .
特にエラーなく、実行完了しました。正常に実行された場合のレスポンスボディは空のようなので、これで問題ありません。
レスポンス要素
アクションが成功した場合、サービスは空の HTTP 本文を持つ HTTP 204 レスポンスを返します。
本当にエイリアスが削除されたのか確認します。
$ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases" \ -H "X-Amz-Security-Token: ${aws_session_token}" \ --aws-sigv4 "aws:amz:${region}:${service}" \ --user "${aws_access_key_id}:${aws_secret_access_key}" \ -s \ | jq -r . { "Aliases": [], "NextMarker": null }
確かにエイリアスは削除されているようですね。
AWS APIを叩きたくてしょうがない時に
curl で AWS API を叩いてみました。
curlがAWS Signature V4をサポートしてくれているので手間なく実行することができました。
AWS CLIではなく、AWS APIを叩きたくてしょうがない時にはぜひ試してみてください。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!